﻿/*
 *  ChgDoc CMS - GNU General Public License, version 3 (GPL-3.0)
 *  Copyright (C)  2012. Ian Quigley
 *  
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *  
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 */

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ChgDoc.Entity;
using System.Text;

namespace ChgDoc.Edit
{
	[AdminPage( "List accounts", "Admin")]
	public partial class AccountList : BasePage
	{
		protected void Page_Load( object sender, EventArgs e )
		{
			if (IsPostBack)
				return;

			UpdateDisplay();
		}

		private void UpdateDisplay( )
		{
			grdList.DataSource = Account.ReadAll();
			grdList.DataBind();
		}

		protected void grdList_ItemCommand(object source, DataGridCommandEventArgs e)
		{
			long id = long.Parse( e.Item.Cells[ 0 ].Text );

			switch (e.CommandName)
			{
                case "Admin":
                    Account acc = new Account() { Id = id };
                    if (acc.Roles.Any( r => r.Code == "Admin" ))
                        acc.RoleDelete( "Admin" );
                    else
                        acc.RoleAdd( "Admin" );

                    UpdateDisplay();
                    break;

				case "View":
                    ShowUser(id);
					break;

				case "Delete":
                    Account.Delete( id );
					UpdateDisplay();
					break;
			}
		}

        protected void grdList_ItemDataBound( object sender, DataGridItemEventArgs e )
        {
            if ((e.Item.ItemType == ListItemType.Footer) || (e.Item.ItemType == ListItemType.Header))
                return;

            Account account= (Account)e.Item.DataItem;
            LinkButton permit = e.Item.Cells[ 2 ].Controls[ 0 ] as LinkButton;
            
            permit.Text = (account.Roles.Any(r=>r.Code == "Admin"))
                ? "Admin"
                : "User";
        }
        private void ShowUser(long id)
        {
            StringBuilder sb = new StringBuilder();
            foreach (var auth in Authentication.ForAccount(id))
                sb.AppendFormat("Auth: {0} {1}<br/>", auth.Mechanism, auth.MechanismsUniqueId);

            foreach (var role in Role.ForAccount(id))
                sb.AppendFormat("Role: {0} {1}<br/>", role.Id, role.Code);


            litView.Text = sb.ToString();
        }
	}
}